Work on update on grammar
authorJeroen van der Heijden <jeroen@transceptor.technology>
Fri, 29 Jun 2018 16:26:41 +0000 (18:26 +0200)
committerJeroen van der Heijden <jeroen@transceptor.technology>
Fri, 29 Jun 2018 16:26:41 +0000 (18:26 +0200)
.gitignore
ChangeLog-2.0.29
grammar/export_grammar.py
grammar/gogrammar/grammar.go
grammar/grammar.py
include/siri/grammar/grammar.h
include/siri/grammar/gramp.h
src/siri/grammar/grammar.c
src/siri/parser/listener.c

index 2c4891f3af540733a09ac30b114e75a28f28c441..2a22e1ca616dc7d065b7c204a0c78a45ee2b1dbf 100644 (file)
@@ -59,6 +59,8 @@ build/
 grammar/cgrammar/
 grammar/jsgrammar/
 grammar/pygrammar/
+grammar/gogrammar/
+grammar/javagrammar/
 
 # Sublime Text
 *.sublime-project
index 40eddec808eaa97de42fafcad1484dc62649a357..a3ba265b9da197db161a6acae7c4d48d512e0bae 100644 (file)
@@ -1 +1,3 @@
   * Added filter log series by using a regular expressions. (issue #100) 
+
+  * Fixed bug with long log values. (issue #102)
\ No newline at end of file
index 2c2eb8a843f9b508ba102210953a3a3bc8076bcd..74d2d90babd865ee752cda2562aa3c9d189eeaaf 100755 (executable)
@@ -6,6 +6,7 @@ Date: 2016-10-10
 '''
 import os
 import sys
+sys.path.insert(0, '../../pyleri/')
 from grammar import siri_grammar
 
 
@@ -76,4 +77,4 @@ if __name__ == '__main__':
               encoding='utf-8') as f:
         f.write(go_file)
 
-    print('\nFinished creating new go-grammar file...\n')
\ No newline at end of file
+    print('\nFinished creating new go-grammar file...\n')
index eb74c3920bb44f91d8978cc1f3646380118e7f9c..b61dd6fcc745f7a149549ebb14394d3b3d9dc1ad 100644 (file)
@@ -4,7 +4,7 @@ package grammar
 // should be used with the goleri module.
 //
 // Source class: SiriGrammar
-// Created at: 2018-06-22 15:10:04
+// Created at: 2018-06-29 17:12:20
 
 import (
        "regexp"
@@ -75,7 +75,6 @@ const (
        GidGroupColumns = iota
        GidGroupMatch = iota
        GidGroupName = iota
-       GidHelp = iota
        GidHelpAccess = iota
        GidHelpAlter = iota
        GidHelpAlterDatabase = iota
@@ -112,6 +111,7 @@ const (
        GidHelpRevoke = iota
        GidHelpSelect = iota
        GidHelpShow = iota
+       GidHelpStmt = iota
        GidHelpTimeit = iota
        GidHelpTimezones = iota
        GidIntExpr = iota
@@ -1635,6 +1635,27 @@ func SiriGrammar() *goleri.Grammar {
                ), goleri.NewToken(NoGid, ","), 0, 0, false),
        )
        timeitStmt := goleri.NewRepeat(GidTimeitStmt, kTimeit, 1, 1)
+       helpStmt := goleri.NewRef()
+       START := goleri.NewSequence(
+               GidSTART,
+               goleri.NewOptional(NoGid, timeitStmt),
+               goleri.NewOptional(NoGid, goleri.NewChoice(
+                       NoGid,
+                       false,
+                       selectStmt,
+                       listStmt,
+                       countStmt,
+                       alterStmt,
+                       createStmt,
+                       dropStmt,
+                       grantStmt,
+                       revokeStmt,
+                       showStmt,
+                       calcStmt,
+                       helpStmt,
+               )),
+               goleri.NewOptional(NoGid, rComment),
+       )
        helpAccess := goleri.NewKeyword(GidHelpAccess, "access", false)
        helpAlterDatabase := goleri.NewKeyword(GidHelpAlterDatabase, "database", false)
        helpAlterGroup := goleri.NewKeyword(GidHelpAlterGroup, "group", false)
@@ -1732,8 +1753,8 @@ func SiriGrammar() *goleri.Grammar {
        helpShow := goleri.NewKeyword(GidHelpShow, "show", false)
        helpTimeit := goleri.NewKeyword(GidHelpTimeit, "timeit", false)
        helpTimezones := goleri.NewKeyword(GidHelpTimezones, "timezones", false)
-       help := goleri.NewSequence(
-               GidHelp,
+       helpStmt.Set(goleri.NewSequence(
+               NoGid,
                kHelp,
                goleri.NewOptional(NoGid, goleri.NewChoice(
                        NoGid,
@@ -1753,26 +1774,6 @@ func SiriGrammar() *goleri.Grammar {
                        helpTimeit,
                        helpTimezones,
                )),
-       )
-       START := goleri.NewSequence(
-               GidSTART,
-               goleri.NewOptional(NoGid, timeitStmt),
-               goleri.NewOptional(NoGid, goleri.NewChoice(
-                       NoGid,
-                       false,
-                       selectStmt,
-                       listStmt,
-                       countStmt,
-                       alterStmt,
-                       createStmt,
-                       dropStmt,
-                       grantStmt,
-                       revokeStmt,
-                       showStmt,
-                       calcStmt,
-                       help,
-               )),
-               goleri.NewOptional(NoGid, rComment),
-       )
+       ))
        return goleri.NewGrammar(START, regexp.MustCompile(`^[a-z_]+`))
 }
index c01d780d7ebf1ae8100b314985d5d6ea29344c0f..3f2affa7c7571134bf17241aa92344d8c2cbfa9f 100644 (file)
@@ -7,6 +7,7 @@ from pyleri import Keyword
 from pyleri import List
 from pyleri import Optional
 from pyleri import Prio
+from pyleri import Ref
 from pyleri import Regex
 from pyleri import Repeat
 from pyleri import Sequence
@@ -773,6 +774,27 @@ class SiriGrammar(Grammar):
 
     timeit_stmt = Repeat(k_timeit, 1, 1)
 
+    help_stmt = Ref()
+
+    START = Sequence(
+        Optional(timeit_stmt),
+        Optional(Choice(
+            select_stmt,
+            list_stmt,
+            count_stmt,
+            alter_stmt,
+            create_stmt,
+            drop_stmt,
+            grant_stmt,
+            revoke_stmt,
+            show_stmt,
+            calc_stmt,
+            help_stmt,
+            most_greedy=False)),
+        Optional(r_comment))
+
+    help_stmt = Sequence(k_help)  # Dummy
+
 
 def _set_attribute(cls, name, value):
     setattr(cls, name, value)
@@ -791,11 +813,14 @@ def _walk(cls, path, structure):
         if structure:
             for child_path, child in structure.items():
                 _walk(cls, child_path, child)
-            value = Sequence(*[getattr(cls,
-                                       'k_' + path[-1],
-                                       Keyword(path[-1])), Optional(
-                Choice(*[
-                    getattr(cls, '_'.join(p)) for p in structure.keys()]))])
+
+            opt = Optional(Choice(*[
+                getattr(cls, '_'.join(p)) for p in structure.keys()]))
+
+            value = Sequence(*[getattr(
+                cls,
+                'k_' + path[-1],
+                Keyword(path[-1])), opt])
         else:
             value = Keyword(path[-1])
     except AttributeError:
@@ -804,7 +829,11 @@ def _walk(cls, path, structure):
         import sys
         sys.exit(1)
     else:
-        _set_attribute(cls, name, value)
+        if name != 'help':
+            _set_attribute(cls, name, value)
+        else:
+            # Replace the ref element
+            cls.help_stmt._element = value
 
 
 def _build_help(cls):
@@ -816,22 +845,5 @@ def _build_help(cls):
         _walk(cls, path, structure)
 
 _build_help(SiriGrammar)
-_set_attribute(SiriGrammar, 'START', Sequence(
-    Optional(SiriGrammar.timeit_stmt),
-    Optional(Choice(
-        SiriGrammar.select_stmt,
-        SiriGrammar.list_stmt,
-        SiriGrammar.count_stmt,
-        SiriGrammar.alter_stmt,
-        SiriGrammar.create_stmt,
-        SiriGrammar.drop_stmt,
-        SiriGrammar.grant_stmt,
-        SiriGrammar.revoke_stmt,
-        SiriGrammar.show_stmt,
-        SiriGrammar.calc_stmt,
-        SiriGrammar.help,
-        most_greedy=False)),
-    Optional(SiriGrammar.r_comment)))
-
 
 siri_grammar = SiriGrammar()
index bd6c2dc83435372fcab9514bb09e13849abf2a0f..44568b647b167a55a442fce2d3c8625793ac0ee8 100644 (file)
@@ -5,7 +5,7 @@
  * should be used with the libcleri module.
  *
  * Source class: SiriGrammar
- * Created at: 2018-06-22 15:10:04
+ * Created at: 2018-06-29 17:09:17
  */
 #ifndef CLERI_EXPORT_SIRI_GRAMMAR_GRAMMAR_H_
 #define CLERI_EXPORT_SIRI_GRAMMAR_GRAMMAR_H_
@@ -75,7 +75,6 @@ enum cleri_grammar_ids {
     CLERI_GID_GROUP_COLUMNS,
     CLERI_GID_GROUP_MATCH,
     CLERI_GID_GROUP_NAME,
-    CLERI_GID_HELP,
     CLERI_GID_HELP_ACCESS,
     CLERI_GID_HELP_ALTER,
     CLERI_GID_HELP_ALTER_DATABASE,
@@ -112,6 +111,7 @@ enum cleri_grammar_ids {
     CLERI_GID_HELP_REVOKE,
     CLERI_GID_HELP_SELECT,
     CLERI_GID_HELP_SHOW,
+    CLERI_GID_HELP_STMT,
     CLERI_GID_HELP_TIMEIT,
     CLERI_GID_HELP_TIMEZONES,
     CLERI_GID_INT_EXPR,
index 2572a6d772b810790eb972916f39f0e720d55729..439efdcef7cbfb75773426f65b642210ce757019 100644 (file)
@@ -26,5 +26,5 @@
 #define F_OFFSET CLERI_GID_F_COUNT
 
 /* help statements */
-#define HELP_OFFSET CLERI_GID_HELP
+#define HELP_OFFSET CLERI_GID_HELP_ACCESS
 #define HELP_COUNT CLERI_GID_HELP_TIMEZONES + 1 - HELP_OFFSET
index 00d1ad456ab24833b5f55f38511f550d150f92c5..dad86d35f61f5db245cebf184f37337cd1586d4b 100644 (file)
@@ -5,7 +5,7 @@
  * should be used with the libcleri module.
  *
  * Source class: SiriGrammar
- * Created at: 2018-06-22 15:10:04
+ * Created at: 2018-06-29 17:09:17
  */
 
 #include "siri/grammar/grammar.h"
@@ -1522,6 +1522,29 @@ cleri_grammar_t * compile_grammar(void)
         ), cleri_token(CLERI_NONE, ","), 0, 0, 0)
     );
     cleri_t * timeit_stmt = cleri_dup(CLERI_GID_TIMEIT_STMT, k_timeit);
+    cleri_t * help_stmt = cleri_ref();
+    cleri_t * START = cleri_sequence(
+        CLERI_GID_START,
+        3,
+        cleri_optional(CLERI_NONE, timeit_stmt),
+        cleri_optional(CLERI_NONE, cleri_choice(
+            CLERI_NONE,
+            CLERI_FIRST_MATCH,
+            11,
+            select_stmt,
+            list_stmt,
+            count_stmt,
+            alter_stmt,
+            create_stmt,
+            drop_stmt,
+            grant_stmt,
+            revoke_stmt,
+            show_stmt,
+            calc_stmt,
+            help_stmt
+        )),
+        cleri_optional(CLERI_NONE, r_comment)
+    );
     cleri_t * help_access = cleri_keyword(CLERI_GID_HELP_ACCESS, "access", CLERI_CASE_SENSITIVE);
     cleri_t * help_alter_database = cleri_keyword(CLERI_GID_HELP_ALTER_DATABASE, "database", CLERI_CASE_SENSITIVE);
     cleri_t * help_alter_group = cleri_keyword(CLERI_GID_HELP_ALTER_GROUP, "group", CLERI_CASE_SENSITIVE);
@@ -1629,8 +1652,8 @@ cleri_grammar_t * compile_grammar(void)
     cleri_t * help_show = cleri_keyword(CLERI_GID_HELP_SHOW, "show", CLERI_CASE_SENSITIVE);
     cleri_t * help_timeit = cleri_keyword(CLERI_GID_HELP_TIMEIT, "timeit", CLERI_CASE_SENSITIVE);
     cleri_t * help_timezones = cleri_keyword(CLERI_GID_HELP_TIMEZONES, "timezones", CLERI_CASE_SENSITIVE);
-    cleri_t * help = cleri_sequence(
-        CLERI_GID_HELP,
+    cleri_ref_set(help_stmt, cleri_sequence(
+        CLERI_NONE,
         2,
         k_help,
         cleri_optional(CLERI_NONE, cleri_choice(
@@ -1652,29 +1675,7 @@ cleri_grammar_t * compile_grammar(void)
             help_timeit,
             help_timezones
         ))
-    );
-    cleri_t * START = cleri_sequence(
-        CLERI_GID_START,
-        3,
-        cleri_optional(CLERI_NONE, timeit_stmt),
-        cleri_optional(CLERI_NONE, cleri_choice(
-            CLERI_NONE,
-            CLERI_FIRST_MATCH,
-            11,
-            select_stmt,
-            list_stmt,
-            count_stmt,
-            alter_stmt,
-            create_stmt,
-            drop_stmt,
-            grant_stmt,
-            revoke_stmt,
-            show_stmt,
-            calc_stmt,
-            help
-        )),
-        cleri_optional(CLERI_NONE, r_comment)
-    );
+    ));
 
     cleri_grammar_t * grammar = cleri_grammar(START, "^[a-z_]+");
 
index 0c2d051a35fc8b6f879c34fad7825bc74cd35ab7..bdce95396f9a0bb5a8a2ddc49509d634a21282bc 100644 (file)
@@ -413,7 +413,7 @@ void siriparser_init_listener(void)
     siriparser_listen_enter[CLERI_GID_GRANT_USER] = enter_grant_user;
     siriparser_listen_enter[CLERI_GID_GROUP_COLUMNS] = enter_xxx_columns;
     siriparser_listen_enter[CLERI_GID_GROUP_MATCH] = enter_group_match;
-    siriparser_listen_enter[CLERI_GID_HELP] = enter_help;
+    siriparser_listen_enter[CLERI_GID_HELP_STMT] = enter_help;
     siriparser_listen_enter[CLERI_GID_LIMIT_EXPR] = enter_limit_expr;
     siriparser_listen_enter[CLERI_GID_LIST_STMT] = enter_list_stmt;
     siriparser_listen_enter[CLERI_GID_MERGE_AS] = enter_merge_as;
@@ -846,6 +846,7 @@ static void enter_group_match(uv_async_t * handle)
 
 static void enter_help(uv_async_t * handle)
 {
+    LOGC("Enter!!");
     siridb_query_t * query = (siridb_query_t *) handle->data;
 
     cleri_node_t * node = query->nodes->node;
@@ -2725,12 +2726,14 @@ static void exit_help_xxx(uv_async_t * handle)
 {
     siridb_query_t * query = (siridb_query_t *) handle->data;
 
+    LOGC("HERE....");
+
     if (query->data != NULL)
     {
 #if DEBUG
         assert (query->packer == NULL);
 #endif
-
+        LOGC("HERE1....%u", query->nodes->node->cl_obj->gid);
         const char * help = siri_help_get(
                 query->nodes->node->cl_obj->gid,
                 (const char *) query->data,
@@ -2738,6 +2741,7 @@ static void exit_help_xxx(uv_async_t * handle)
 
         if (help == NULL)
         {
+            LOGC("HERE2....");
             siridb_query_send_error(handle, CPROTO_ERR_QUERY);
             return;
         }